package leetcode;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * @创建人 mby381
 * @创建时间 2022/3/13
 * @描述
 */
public class Solution0433 {
    public static int anInt = 0;

    public static int minMutation(String start, String end, String[] bank) {
        if (start.length() != end.length()) {
            System.out.println("起始长度不等");
            return -1;
        }
        int num = 0;
        ArrayList<Integer> tag = new ArrayList<>();
        Iterator it = tag.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
        for (int i = 0; i < start.length(); i++) {
            if (start.charAt(i) != end.charAt(i)) {
                tag.add(i);
                num++;
            }
        }
        if (num > bank.length) {
            System.out.println("bank长度不够");
            return -1;
        }
        if (num == 1) {
            if (end.equals(bank[0])) {
                return 1;
            } else {
                return -1;
            }
        }
        List<ArrayList<Integer>> li = new ArrayList<>();
        for (int j = 0; j < bank.length; j++) {
            li.add(new ArrayList<>());
            for (int k = 0; k < start.length(); k++) {
                if (start.charAt(k) != bank[j].charAt(k)) {
                    li.get(j).add(k);
                }
            }
        }
        for (int i = 0; i < num; i++) {
            anInt = 0;
            ArrayList<Integer> temp = new ArrayList<>();
            int numOfSteps = 0;
            temp.add(tag.get(i));
            System.out.println(temp);
            for (int j = 0; j < num - 1; j++) {
                System.out.println("!!!");
                if (avaTrack(temp, li)) {
                    numOfSteps++;
                    temp = li.get(anInt);
                    System.out.println("向前进了一步，temp为：" + temp + "  num:" + (numOfSteps + 1));
                } else {
                    break;
                }
                if (numOfSteps == num - 1) {
                    return numOfSteps + 1;
                }
            }
        }
        System.out.println(li.get(0).get(0) + "没找到出路啊");
        return -1;
    }

    public static boolean avaTrack(ArrayList<Integer> li, List<ArrayList<Integer>> lis) {
        System.out.println("lis为：" + lis);
        for (int p = 0; p < lis.size(); p++) {
            if (lis.get(p).containsAll(li) && (lis.get(p).size() == li.size() + 1)) {//&& (lis.get(p).size() == li.size() + 1)
                System.out.println(lis.get(p));
                anInt = p;
                return true;
            }
        }
        return false;
    }

//    public static int mySolution(String start, String end, String[] bank) {
//        if (start.length() != end.length()) {
//            //长度不等时返回—1
//            return -1;
//        }
//        int num = 0;
//        ArrayList<Integer> tag = new ArrayList<>();
//        for (int i = 0; i < start.length(); i++) {
//            if (start.charAt(i) != end.charAt(i)) {
//                tag.add(i);
//                num++;
//            }
//        }
//        if (num > bank.length) {
//            //bank长度不足时返回-1
//            return -1;
//        }
//        System.out.println(tag.get(0));
//        for (int i = 0; i < tag.size(); i++) {
////                for()
//        }
//        return -1;
//    }
}
/*
    public static int anInt =0;
    public static int minMutation(String start, String end, String[] bank) {
        if (start.length() != end.length()) {
            return -1;
        }
        int num = 0;
        ArrayList<Integer> tag = new ArrayList<>();
        for (int i = 0; i < start.length(); i++) {
            if (start.charAt(i) != end.charAt(i)) {
                tag.add(i);
                num++;
            }
        }
        if (num > bank.length) {
            return -1;
        }
        if(num==1&&end.equals(bank[0])){
            return 1;
        }if(num==1&&!end.equals(bank[0])){
            return -1;
        }
        List<ArrayList<Integer>> li = new ArrayList<>();
        for (int j = 0; j < bank.length; j++) {
            li.add(new ArrayList<>());
            for (int k = 0; k < start.length(); k++) {
                if (start.charAt(k) != bank[j].charAt(k)) {
                    li.get(j).add(k);
                }
            }
        }
        for (int i = 0; i < num; i++) {
            anInt=0;
            ArrayList<Integer> temp=new ArrayList<>();
            int numOfSteps=0;
            temp.add(tag.get(i));
            System.out.println(temp);
            for (int j=0;j<num-1;j++){
                System.out.println("!!!");
                if(avaTrack(temp,li)){
                    numOfSteps++;
                    temp=li.get(anInt);
                }else {
                    break;
                }
                if(numOfSteps==num-1){
                    return numOfSteps+1;
                }
            }
        }
        return -1;
    }

    public static boolean avaTrack(ArrayList<Integer> li, List<ArrayList<Integer>> lis) {
        for (int p = 0; p < lis.size(); p++) {
            if (lis.get(p).containsAll(li) &&(lis.get(p).size()== li.size() + 1)) {
                System.out.println(lis.get(p));
                anInt =p;
                return true;
            }
        }
        return false;
    } */